package com.zillion.common.utils;

import java.time.LocalDate;
import java.time.Period;

public class IdCardUtils {

    /**
     * 从身份证号码中提取出生日期
     *
     * @param idCard 身份证号码
     * @return 出生日期，格式为 yyyy-MM-dd
     */
    public static String extractBirthday(String idCard) {
        String birthday;
        if (idCard.length() == 18) {
            // 18位身份证号码
            birthday = idCard.substring(6, 10) + "-" + idCard.substring(10, 12) + "-" + idCard.substring(12, 14);
        } else if (idCard.length() == 15) {
            // 15位身份证号码
            birthday = "19" + idCard.substring(6, 8) + "-" + idCard.substring(8, 10) + "-" + idCard.substring(10, 12);
        } else {
            throw new IllegalArgumentException("身份证号码长度不正确");
        }
        return birthday;
    }

    /**
     * 根据出生日期计算年龄
     *
     * @param birthday 出生日期，格式为 yyyy-MM-dd
     * @return 年龄
     */
    public static int calculateAge(String birthday) {
        LocalDate birthDate = LocalDate.parse(birthday);
        LocalDate currentDate = LocalDate.now();
        return Period.between(birthDate, currentDate).getYears();
    }

    /**
     * 根据身份证号码提取性别
     *
     * @param idCard 身份证号码
     * @return 性别（1表示男，2表示女）
     */
    public static int extractGender(String idCard) {
        String genderStr;
        if (idCard.length() == 18) {
            genderStr = idCard.substring(16, 17);
        } else if (idCard.length() == 15) {
            genderStr = idCard.substring(14, 15);
        } else {
            throw new IllegalArgumentException("身份证号码长度不正确");
        }

        int genderCode = Integer.parseInt(genderStr);
        // 奇数为男，偶数为女
        return (genderCode % 2 == 1) ? 1 : 0;
    }
}

